import axios from "axios";
import {Message} from "element-ui";


// 创建axios，赋给变量service

const BASEURL = process.env.NODE_ENV === 'production' ? process.env.VUE_APP_API : process.env.VUE_APP_API;
const service = axios.create({
    baseURL: BASEURL,  // url = base url + request url
    timeout: 15000,   // 超时
    headers: {
        'Content-Type': "application/json; charset=utf-8"
    }
});


/**
 * 请求接口前，做一些数据处理（请求拦截器）
 */
service.interceptors.request.use(function (config) {
    config.url += `${config.url && config.url.indexOf('?') > -1 ? '&' : '?'}t=${Date.parse(new Date())}`
    const token = localStorage.getItem("token")
    if (token) {
        //请求头中放入token
        config.headers['Authorization'] = localStorage.getItem("token")
    }

    return config;
}, function (error) {
    return Promise.reject({
        code,
        message: new Error(msg || 'Error')
    });
});

/**
 * 请求接口后，返回数据进行拦截（响应拦截器）
 */
service.interceptors.response.use(
    response => {
        // 判断是否为成功的响应
        if (response.status === 200) {
            // 对响应数据做点什么
            let data = response.data
            // 业务需求
            if (data.code !== 200) {
                Message.error(data.msg);
                return Promise.reject(data);
            } else {
                return response.data;
            }
        }
        // 处理错误的响应
        return Promise.reject(new Error('响应错误'));
    },
    error => {
        // 对于请求错误或响应错误，应该给出友好的提示信息
        if (error.message.includes('timeout')) {
            return Promise.reject(new Error('请求超时'));
        }
        if (error.response) {
            const status = error.response.status;
            switch (status) {
                case 401:
                    Message.error('登陆过期，请重新登陆');
                    localStorage.clear();
                    return Promise.reject(new Error('登陆过期，请重新登陆'));
                case 404:
                    Message.error('请求接口不存在');
                    return Promise.reject(new Error('请求接口不存在'));
                default:
                    Message.error('服务器错误');
                    return Promise.reject(new Error('服务器错误'));
            }
        } else {
            return Promise.reject(new Error('网络错误'));
        }
    });
export default service